home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / bits / fcntl2.h < prev    next >
C/C++ Source or Header  |  2009-10-07  |  6KB  |  174 lines

  1. /* Checking macros for fcntl functions.
  2.    Copyright (C) 2007 Free Software Foundation, Inc.
  3.    This file is part of the GNU C Library.
  4.  
  5.    The GNU C Library is free software; you can redistribute it and/or
  6.    modify it under the terms of the GNU Lesser General Public
  7.    License as published by the Free Software Foundation; either
  8.    version 2.1 of the License, or (at your option) any later version.
  9.  
  10.    The GNU C Library is distributed in the hope that it will be useful,
  11.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.    Lesser General Public License for more details.
  14.  
  15.    You should have received a copy of the GNU Lesser General Public
  16.    License along with the GNU C Library; if not, write to the Free
  17.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  18.    02111-1307 USA.  */
  19.  
  20. #ifndef    _FCNTL_H
  21. # error "Never include <bits/fcntl2.h> directly; use <fcntl.h> instead."
  22. #endif
  23.  
  24. /* Check that calls to open and openat with O_CREAT set have an
  25.    appropriate third/fourth parameter.  */
  26. #ifndef __USE_FILE_OFFSET64
  27. extern int __open_2 (__const char *__path, int __oflag) __nonnull ((1));
  28. extern int __REDIRECT (__open_alias, (__const char *__path, int __oflag, ...),
  29.                open) __nonnull ((1));
  30. #else
  31. extern int __REDIRECT (__open_2, (__const char *__path, int __oflag),
  32.                __open64_2) __nonnull ((1));
  33. extern int __REDIRECT (__open_alias, (__const char *__path, int __oflag, ...),
  34.                open64) __nonnull ((1));
  35. #endif
  36. __errordecl (__open_too_many_args,
  37.          "open can be called either with 2 or 3 arguments, not more");
  38. __errordecl (__open_missing_mode,
  39.          "open with O_CREAT in second argument needs 3 arguments");
  40.  
  41. __extern_always_inline int
  42. open (__const char *__path, int __oflag, ...)
  43. {
  44.   if (__va_arg_pack_len () > 1)
  45.     __open_too_many_args ();
  46.  
  47.   if (__builtin_constant_p (__oflag))
  48.     {
  49.       if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () < 1)
  50.     {
  51.       __open_missing_mode ();
  52.       return __open_2 (__path, __oflag);
  53.     }
  54.       return __open_alias (__path, __oflag, __va_arg_pack ());
  55.     }
  56.  
  57.   if (__va_arg_pack_len () < 1)
  58.     return __open_2 (__path, __oflag);
  59.  
  60.   return __open_alias (__path, __oflag, __va_arg_pack ());
  61. }
  62.  
  63.  
  64. #ifdef __USE_LARGEFILE64
  65. extern int __open64_2 (__const char *__path, int __oflag) __nonnull ((1));
  66. extern int __REDIRECT (__open64_alias, (__const char *__path, int __oflag,
  67.                     ...), open64) __nonnull ((1));
  68. __errordecl (__open64_too_many_args,
  69.          "open64 can be called either with 2 or 3 arguments, not more");
  70. __errordecl (__open64_missing_mode,
  71.          "open64 with O_CREAT in second argument needs 3 arguments");
  72.  
  73. __extern_always_inline int
  74. open64 (__const char *__path, int __oflag, ...)
  75. {
  76.   if (__va_arg_pack_len () > 1)
  77.     __open64_too_many_args ();
  78.  
  79.   if (__builtin_constant_p (__oflag))
  80.     {
  81.       if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () < 1)
  82.     {
  83.       __open64_missing_mode ();
  84.       return __open64_2 (__path, __oflag);
  85.     }
  86.       return __open64_alias (__path, __oflag, __va_arg_pack ());
  87.     }
  88.  
  89.   if (__va_arg_pack_len () < 1)
  90.     return __open64_2 (__path, __oflag);
  91.  
  92.   return __open64_alias (__path, __oflag, __va_arg_pack ());
  93. }
  94. #endif
  95.  
  96.  
  97. #ifdef __USE_ATFILE
  98. # ifndef __USE_FILE_OFFSET64
  99. extern int __openat_2 (int __fd, __const char *__path, int __oflag)
  100.      __nonnull ((2));
  101. extern int __REDIRECT (__openat_alias, (int __fd, __const char *__path,
  102.                     int __oflag, ...), openat)
  103.      __nonnull ((2));
  104. # else
  105. extern int __REDIRECT (__openat_2, (int __fd, __const char *__path,
  106.                     int __oflag), __openat64_2)
  107.      __nonnull ((2));
  108. extern int __REDIRECT (__openat_alias, (int __fd, __const char *__path,
  109.                     int __oflag, ...), openat64)
  110.      __nonnull ((2));
  111. # endif
  112. __errordecl (__openat_too_many_args,
  113.          "openat can be called either with 3 or 4 arguments, not more");
  114. __errordecl (__openat_missing_mode,
  115.          "openat with O_CREAT in third argument needs 4 arguments");
  116.  
  117. __extern_always_inline int
  118. openat (int __fd, __const char *__path, int __oflag, ...)
  119. {
  120.   if (__va_arg_pack_len () > 1)
  121.     __openat_too_many_args ();
  122.  
  123.   if (__builtin_constant_p (__oflag))
  124.     {
  125.       if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () < 1)
  126.     {
  127.       __openat_missing_mode ();
  128.       return __openat_2 (__fd, __path, __oflag);
  129.     }
  130.       return __openat_alias (__fd, __path, __oflag, __va_arg_pack ());
  131.     }
  132.  
  133.   if (__va_arg_pack_len () < 1)
  134.     return __openat_2 (__fd, __path, __oflag);
  135.  
  136.   return __openat_alias (__fd, __path, __oflag, __va_arg_pack ());
  137. }
  138.  
  139.  
  140. # ifdef __USE_LARGEFILE64
  141. extern int __openat64_2 (int __fd, __const char *__path, int __oflag)
  142.      __nonnull ((2));
  143. extern int __REDIRECT (__openat64_alias, (int __fd, __const char *__path,
  144.                       int __oflag, ...), openat64)
  145.      __nonnull ((2));
  146. __errordecl (__openat64_too_many_args,
  147.          "openat64 can be called either with 3 or 4 arguments, not more");
  148. __errordecl (__openat64_missing_mode,
  149.          "openat64 with O_CREAT in third argument needs 4 arguments");
  150.  
  151. __extern_always_inline int
  152. openat64 (int __fd, __const char *__path, int __oflag, ...)
  153. {
  154.   if (__va_arg_pack_len () > 1)
  155.     __openat64_too_many_args ();
  156.  
  157.   if (__builtin_constant_p (__oflag))
  158.     {
  159.       if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () < 1)
  160.     {
  161.       __openat64_missing_mode ();
  162.       return __openat64_2 (__fd, __path, __oflag);
  163.     }
  164.       return __openat64_alias (__fd, __path, __oflag, __va_arg_pack ());
  165.     }
  166.  
  167.   if (__va_arg_pack_len () < 1)
  168.     return __openat64_2 (__fd, __path, __oflag);
  169.  
  170.   return __openat64_alias (__fd, __path, __oflag, __va_arg_pack ());
  171. }
  172. # endif
  173. #endif
  174.